package com.cskaoyan.javase.oop3._4anonymous._1usecase;

/**
 * 匿名内部类的使用场景,基本覆盖了局部内部类,因为它比局部内部类的语法更加简洁
 * 当你在局部位置,需要创建一个外部类的子类对象,或者外部接口的实现类对象
 *      用匿名内部类语法更简洁,更好
 * 举例:
 *      比如作为方法的实参
 *      作为方法的返回值
 *
 * @since 16:05
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int num = 10;
        test(new AbstractPerson() {
            @Override
            public void method(int a) {
                System.out.println(a);
                System.out.println(num);
                // System.out.println(num++);
            }
        }, 100);

        IA ia = test();
        ia.method();
    }

    public static void test(AbstractPerson ap, int a) {
        ap.method(100);
    }

    public static IA test() {
        return new IA() {
            @Override
            public void method() {
                System.out.println("hello world!");
            }
        };
    }
}

abstract class AbstractPerson {
    public abstract void method(int a);
}

interface IA {
    void method();
}